const fs = require("fs");
const parser = require("@babel/parser");
const babel = require("@babel/core");
const traverse = require("@babel/traverse").default;
const generator = require("@babel/generator").default;
const types = require("@babel/types");
const { logPlugin } = require("@babel/preset-env/lib/debug");
const { log } = require("console");

// 读取输入代码
const inputCode = fs.readFileSync("./inputJs.js", { encoding: "utf-8" });

// 解析为 AST
const astTree = parser.parse(inputCode);



// AST代码
let visitor = {
    StringLiteral({node}) {
        if (node.value !== node.extra.raw) {
            node.extra.raw = "'" + node.value + "'";
        }
    },
}
traverse(astTree, visitor);


// 加载解密函数
const _0x4afa = ['1993-03-11', '79.4KG', '1984-05-29', 'stringify', '128.8KG', '1991-06-29', '198cm', 'davis.png', '208cm', '卡尔-安东尼-唐斯', '188cm', '196cm', 'antetokounmpo.png', '83.9KG', '112.5KG', 'toString', 'embiid.png', '88.5KG', '114.8KG', '203cm', '206cm', '斯蒂芬-库里', '1988-03-14', 'JD8wgBMgVjdQbBUVbMarpZMAadLD7yvfzVV', 'Base64', '考瓦伊-莱昂纳德', '扬尼斯-安特托昆博', 'leonard.png', '安东尼-戴维斯', '达米安-利拉德', '109.8KG', 'harden.png', '99.8KG', 'durant.png', '102.1KG', 'paul.png', '1989-08-26', '1985-05-06', 'key', 'parse', '201cm', '113.4KG', '108.9KG', '1988-11-12', 'Utf8', '90.7KG', '尼科拉-约基奇', '213cm', 'pad', 'enc', '卡梅罗-安东尼', 'westbrook.png', 'encrypt', '127.0KG', 'thompson.png', '1994-12-06', 'irving.png', '185cm', 'lillard.png', '拉塞尔-威斯布鲁克', '1990-02-08', 'anthony.png', '191cm'];
(function (_0x35db0b, _0x4afab2) {
    const _0x343162 = function (_0x6f5802) {
        while (--_0x6f5802) {
            _0x35db0b['push'](_0x35db0b['shift']( "'push'"));
        }
    };
    _0x343162(++_0x4afab2);
})(_0x4afa, 0xed);
const _0x3431 = function (_0x35db0b, _0x4afab2) {
    _0x35db0b = _0x35db0b - 0x0;
    let _0x343162 = _0x4afa[_0x35db0b];
    return _0x343162;
};

// 解密函数调用
let visitor2={
    CallExpression(path) {
        let {node} = path;
        //判断一下调用的是不是_0x5e920f函数，如果不是则不做任何处理
        if (node.arguments.length !== 1 || node.callee.name !== '_0x5e920f') {
            return;
        }
        // 如果调用的是_0x5e920f函数，就把它的参数拿出来
        let args = node.arguments[0].value;
        // 调用解密函数解密
        let result = _0x3431(args)
        // 用解密后的值替换掉
        path.replaceWith(types.stringLiteral(result));
    }
}
traverse(astTree, visitor2);


// 生成代码
const outputCode = generator(astTree).code;

// 写入输出文件
fs.writeFile("./outputJs.js", outputCode, (err) => {
    if (err) {
        console.error("写入文件时出错: ", err);
    } else {
        console.log("代码成功写入 outputCode.js");
    }
});